/* 
 * Copyright 2008 Rodrigo Reyes <reyes.rr at gmail dot com>
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You may
 * obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License.
**/
package net.kornr.abstractcanvas.awt.command;

import java.awt.Font;
import java.awt.Graphics2D;
import java.util.LinkedList;


import net.kornr.abstractcanvas.awt.CanvasStack;
import net.kornr.abstractcanvas.awt.CanvasState;
import net.kornr.abstractcanvas.awt.Command;
import net.kornr.abstractcanvas.client.CanvasTextSupport;

public class DrawAnnotation extends AbstractStringContainer implements Command {

	private double m_x, m_y;
	private Font m_font;
	private int m_align;

	public DrawAnnotation(String value, double x, double y, Font font) 
	{
		this(value,x,y,font,CanvasTextSupport.ALIGN_START);
	}
	
	public DrawAnnotation(String value, double x, double y, Font font, int alignment) 
	{
		super(value);
		m_x = x;
		m_y = y;
		m_font = font;
		m_align = alignment;
	}

	public void applyCommand(LinkedList<CanvasState> statestack, Graphics2D g, CanvasStack canvastack) 
	{
		CanvasState state = statestack.getLast();
		
		g.setFont(m_font);
		g.setColor(state.getStrokeColor());
		switch(m_align)
		{
		case CanvasTextSupport.ALIGN_START:
			g.drawString(getValue(), (int)m_x, (int)m_y + m_font.getSize());
			break;
		case CanvasTextSupport.ALIGN_CENTER:
		{
			double w = m_font.getStringBounds(getValue(), g.getFontRenderContext()).getWidth();
			g.drawString(getValue(), (int)(m_x-(w/2)), (int)m_y + m_font.getSize());
		}
			break;
		case CanvasTextSupport.ALIGN_END:
		{
			double w = m_font.getStringBounds(getValue(), g.getFontRenderContext()).getWidth();
			g.drawString(getValue(), (int)(m_x-w), (int)m_y + m_font.getSize());
		}
			break;			
		}
		
	}

}
